iT邦幫忙

2024 iThome 鐵人賽

DAY 11
1
DevOps

Grafana Zero to Hero系列 第 11

Grafana Zero to Hero - Data Source:Prometheus

  • 分享至 

  • xImage
  •  

Prometheus 是目前主流的指標收集工具,指標可以透過專用的 PromQL 語法查詢,並且提供 Web UI 與告警機制。Prometheus 起源於 2012 年,由音樂分享平台 SoundCloud 開發,當時該公司面臨著管理數百個微服務和數千個 Process 的挑戰,因此開發出替代 StatsDGraphite 的監控解決方案。

Flow

Prometheus Metrics 以文字檔的方式揭露,並透過 ExporterPrometheus Client Library 生成,格式如下:

# HELP container_memory_usage_bytes Current memory usage in bytes
# TYPE container_memory_usage_bytes gauge
container_memory_usage_bytes{image="prom/prometheus:v2.54.0",name="prometheus"} 6.4237568e+07
container_memory_usage_bytes{image="grafana/grafana:11.2.0",name="grafana"} 1.08425216e+08
container_memory_usage_bytes{image="gcr.io/cadvisor/cadvisor:v0.49.1",name="cadvisor"} 8.8117248e+07

# HELP fastapi_requests Total count of requests by method and path.
# TYPE fastapi_requests counter
fastapi_requests_total{method="GET",path="/"} 10.0
fastapi_requests_total{method="GET",path="/cpu_task"} 10.0
fastapi_requests_total{method="GET",path="/io_task"} 10.0

# HELP fastapi_responses Total count of responses by method, path and status codes.
# TYPE fastapi_responses counter
fastapi_responses_total{method="GET",path="/random_status",status_code="200"} 5.0
fastapi_responses_total{method="GET",path="/random_status",status_code="300"} 2.0

Metrics

  • Metrics Name:指標名稱
  • Label Pair:補充的描述資訊
  • Value:指標的數值

Prometheus 會定期從服務中抓取指標資料,並標上時間戳後儲存。這樣的機制能幫助我們觀察指標的變化趨勢與異常狀況。

Grafana Explore Metrics

Grafana Explore Metrics 是 Grafana 11 在 GrafanaCON 2024 宣布的新功能,提供使用者一個更直觀的方式來探索 Prometheus 指標,即使不了解 PromQL 也能輕鬆使用。

Explore
在左側選單選擇 Explore,並進入 Metrics 頁籤。

Explore
建立新的 Metrics Exploration,輸入文字篩選 Prometheus 指標,部分匹配的結果將會顯示下方。

Explore
選擇後,顯示可查詢的 Label。

Explore
點擊 Label 後進入 Breakdown 頁籤,並將選擇的 Label 作為 Legend 顯示。呈現方式可以選擇單一圖表(Single)或分開繪製(Grid)。

Explore

Query

Grafana 可以將 Prometheus Metrics 的查詢結果顯示為 Time seriesTable,時間序列圖更適合觀察趨勢,而表格則能清楚顯示每個 Label 與其值。

Series

Table

在執行 PromQL 查詢 Prometheus Metrics 在時,可以選擇要查詢指定區間 Range 或是者是指查詢當下的值 Instant,如果只查詢 Instant 能夠更快取得結果。在 Dashboard 或 Explore 中選擇的時間區間會作為 Range 的範圍,而查詢 Instant 時則會取得時間區間的結束點資料。

Range
查詢範圍

Instant
查詢當下值

Visualization 常見搭配

Time Series

適合用來展示如 CPU 使用率、Queue Size 等資源的使用情況,利用 Time Series 的折線圖可以發現趨勢、異常或指標間的關聯性。

Series

Gauge

能直接顯示當下的值,並搭配 Threshold 進行快速判斷是否在合理範圍內。

Gauge

Stat

Stat 如果只顯示當下值的話其實效果和 Gauge 差不多,所以通常會搭配趨勢圖使用。但因為 Grafana 對 Prometheus 發送的 PromQL 會有特別的調整,當加大時間區間時,最後一個資料點不一定會取得時間序列中最新的一筆,所以有時候會發現預期應該要相同的累計值如 Request Count 卻會變小。如果要解決這個問題,Type 可以選擇查詢 Both 同時取得 Range 與 Instant 的結果,並透過 Transform 將資料合併與排序,這樣就可以保證會有一筆最新的時,也有時間序列資料可以繪製出趨勢圖。

Stat

Stat
前一張圖在查詢區間小時左右相同,但當查詢區間大時左邊只使用 Range 的資料則不回符合預期

Table

在查詢設定中 Format 選擇 Table 後就可以將資料轉換成表格,並搭配只查詢 Instant 取得最新的資訊,使用 Table Visualization 就能夠清楚看到各個 Label 的資訊與指標值。如果覺得無用的 Label 很多或是對 Label 名稱不滿意,可以再搭配 Transform Organize fields by name 調整。

Table

但如果覺得 Label 數量實在太多,使用 Organize fields by name 也還是不易修改,可以考慮使用 Prometheus group、sum、count 這類 Aggregation operators,他們在計算時能夠設定 by 根據選定的 Label 將資料聚合,計算出來的結果就只會有選定的 Label。

Table sum by

Table sum by
Sum by 後的 Table 就只剩下選定的 Label

使用 Transform Join by field 可以將兩個有相同 Label 的 Prometheus Metrics 合併成一個 Table。

Join
先將 Label 縮減

Join Transform
再用 Join by field 合併

雖然 Join by field 很萬用,但能使用的前提是兩個欄位名稱或 Label 名稱必須要相同。Prometheus Metrics 的 label_replace 能夠複製選定的舊有 Label 值並給予新的 Label Name,透過這個功能我們就能夠預先將預期要配對的 Label 轉換成我們需要的名稱。

Replace

State Timeline 與 Status History

Prometheus Metrics 除了用數值來表達狀態外,將狀態的列舉文字放在 Label 中也是一種常見的做法,這些列舉的文字可以搭配 Filter fields by nameGrouping to MatrixConvert field type 轉換,再透過 State Timeline 與 Status History 來呈現,直接觀察到狀態變化的時間點。

State

State Transform

Lab

範例程式碼:https://github.com/blueswen/grafana-zero-to-hero/tree/main/04-datasource/02-prometheus

此 Lab 會建立

  1. Application:被監控的服務
  2. cAdvisor:收集 Container 資料
  3. Node Exporter:收集運行的機器(Node)的資料
  4. Prometheus:採集 cAdvisor、Node Exporter 的 Metrics
  5. Grafana:
    1. 查看預先建立好的 Prometheus Data Source 設定方式與 Dashboard

Quick Start

  1. 啟動所有服務

    docker-compose up -d
    
  2. 檢視服務

    1. Grafana: http://localhost:3000,登入帳號密碼為 admin/admin
      1. 點擊左上 Menu > Dashboards > Provision Dashboards 即可選擇預先建立的 Dashboard
  3. 關閉所有服務

    docker-compose down
    

上一篇
Grafana Zero to Hero - Data Source:從設定到探索
下一篇
Grafana Zero to Hero - Data Source:Relational Database
系列文
Grafana Zero to Hero15
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言